//对于弹出对话框的通用处理
export default class Dialog {
    //如果bootstrap控件支持弹出url的形式可以再进行简化，只要传递URL和响应按钮id即可
    //包装对话框的id 对话框form的id 对话框响应按钮的id
    constructor(private idModal: string, private idForm: string, private idDo: string) {
    }

    //对话框的初始化
    public init(sucess: (data: string)=>void) {
        $(this.idModal).unbind("shown.bs.modal")
        $(this.idDo).unbind("click")

        let that = this
        //启用对话框的校验，具体页面中需要加的标签 data-bv-***参考如下的URL
        $(this.idForm).bootstrapValidator()
        //FORM表单的reset，保证表单中没有被bootstrapValidator校验的也能够原始状态，如应对上载文件的pack
        //let frm : any = $(this.idForm)[0]
        //frm.reset()

        //bootstrapValidator#resetForm方法有时不生效，待模态框显示后，重新调用resetForm方法
        // $(this.idModal).bind("shown.bs.modal", function () {
        //     //console.log("bs.modal")
        //     $(that.idForm).data("bootstrapValidator").resetForm()
        // });

        $(this.idDo).bind("click", ()=> {
            if ($(that.idForm).data("bootstrapValidator").validate().isValid()) {
                //禁用对话框再次提交，等待对话框的完成 在AJAX完成
                if (sucess) sucess($(that.idForm).serialize())
                //提交处理成功后自动关闭 还原最初状态
                let frm : any = $(this.idForm)[0]
                frm.reset()
                $(this.idForm).bootstrapValidator('resetForm', true)
                $(this.idForm).bootstrapValidator('resetForm')
                that.close()
            }
        });
    }

    //简化调用者使用
    public initShow(sucess: (data: string)=>void) {
        this.init(sucess)
        this.show()
    }

    public show() {
        //$(this.idForm).bootstrapValidator('resetForm', true)
        //$(this.idForm).bootstrapValidator('resetForm')
        $(this.idModal).modal("show")
    }

    public close() {
        $(this.idModal).modal("hide")
    }
}
